《笨办法学Python》笔记29-----字典,可爱的字典

字典

字典也是python中的基础数据类型。

提到字典你可能会想到读书时用的新华字典,使用它你可以通过笔划或者拼音定位到汉字,在python中把笔划或者拼音叫做键,通过键找到的汉字称作值,python中的字典就是由键值对组成的集合,这个集合中的每个键都是唯一的,不可重复。

dict = {key1:value1,key2:value2,...,keyn:valuen}

字典举例

dictex = {'1':'beijing', 2:'newyork', 'shanghai':'china'}

字典中的键和值可以是任意类型数据,字典可以任意类型关联任意类型。

操作字典

stuff = {'name':'damao', 'age':36, 'height':175}

  • 索引

列表中,可通过从0开始的数字对列表中的元素进行索引,如list1[1],list1[-2],list1[1:5],字典通过键进行索引,可返回相应的值。以上例为例,stuff['name']返回‘damao’,stuff['age']返回36

  • 增加

通过对键值对,可以给字典增加元素,但键不能跟字典中的键重复。

stuff['weight'] = 70

stuff[1] = 'what'

stuff[2] = 'how'

  • 删除

清空字典使用clear函数,如stuff.clear()

删除单个元素,可使用关键字del,如del stuff[1]

还可以使用列表中也使用的pop函数删除字典的元素并返回,但字典中的pop函数至少有一个键参数,并不一定是删除最后一个元素,字典中的数据是无序的,所以并没有第一个,最后一个的说法。

如有一个字典

stuff = {'name':'damao', 'age':36,1:'test', 2:'a', 'height':175}

stuff.pop(1)可删除键值对1:‘test’并返回‘test’

stuff.pop(3,'b'),不删除任何字典元素但返回'b'

stuff.pop(2,'f'),删除键值对2:'a',并返回'a'

使用popitem函数删除并返回字典中的某个元素,如,stuff.popitem()随机删除字典中的一对键值,并以tuple形式返回

  • 修改

可通过已知键索引对字典进行修改

stuff['age'] = 45 #修改年龄

教材举例

cities = {'CA':'San Francisco', 'MI':'Detroit', 'FL':'Jacksonville'}


cities['NY'] = 'New York'

cities['OR'] = 'Portland'

def find_city(themap, state):
  if state in themap:
    return themap[state]
  else:
    return "Not Found"

cities['_find'] = find_city #关联一个函数地址到字典中

while True:
  print "State? (Enter to quit)",
  state = raw_input("> ")
  if not state: break

  city_found = cities['_find'](cities, state)
  print city_found

字典的大度是地球人都知道的,上例中就保存了一个函数地址在字典中。

字典类型还有许多重要函数,可通过查阅帮助文档获得。

如获取字典中的键

| keys(...)
| D.keys() -> list of D's keys

获取字典中的值

| values(...)
| D.values() -> list of D's values

获取字典中的键值对

| items(...)
| D.items() -> list of D's (key, value) pairs, as 2-tuples

上例中有个隐藏的梗,那就是循环在啥情况下会退出?

if not state: break

state输入什么值,python会认为False?

state是通过raw_input函数获得值的,查看raw_input帮助


raw_input(...)
    raw_input([prompt]) -> string

    Read a string from standard input.  The trailing newline is stripped.
    If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.
    On Unix, GNU readline is used if enabled.  The prompt string, if given,
    is printed without a trailing newline before reading.

1.raw_input函数的返回值是字符串

2.用户触发EOF,抛出EOFError异常

EOF是什么鬼?

EOF,全称END OF FILE,表示"文字流"(stream)的结尾。这里的"文字流",可以是文件(file),也可以是标准输入.

关于EOF有很多资料,这里截取一段

Linux中,在新的一行的开头,按下Ctrl-D,就代表EOF(如果在一行的中间按下Ctrl-D,则表示输出"标准输入"的缓存区,所以这时必须按两次Ctrl-D);Windows中,Ctrl-Z表示EOF。(顺便提一句,Linux中按下Ctrl-Z,表示将该进程中断,在后台挂起,用fg命令可以重新切回到前台;按下Ctrl-C表示终止该进程。)

EOF@维基百科

EOF@阮一峰的网络日志

这里还有一个梗,为什么按回车键即正常退出,而不抛出EOF异常或其他任何异常???

为教材的举例增加一些调试代码

#coding:utf-8
cities = {'CA':'San Francisco', 'MI':'Detroit', 'FL':'Jacksonville'}


cities['NY'] = 'New York'

cities['OR'] = 'Portland'

def find_city(themap, state):
  if state in themap:
    return themap[state]
  else:
    return "Not Found"

cities['_find'] = find_city #关联一个函数地址到字典中

while True:
  print "State? (Enter to quit)",
  state = raw_input("> ")
  print state              #打印输入的字符串
  print len(state)         #计算输入字符串长度
  print bool(state)        #判断输入的真值True or False

  if not state: break

  city_found = cities['_find'](cities, state)
  print city_found


增加了按下回车键时,输出一些辅助信息

从下面的链接中得知,linux系统中按下回车键相当于输入了'\n'实现回车换行操作。

而raw_input函数读入标准输入时是抹掉换行符的,所以按下回车键被删掉换行符后,raw_input的返回为空

执行程序,按下回车键,看打印信息

damao@damao:~/Desktop$ python t.py
State? (Enter to quit) >

0
False
damao@damao:~/Desktop$

可以看到字符串长度为0,真值测试为假

上述输出的换行效果是print函数产生的,若去掉打印代码,直接按下回车键后,输出信息

damao@damao:~/Desktop$ python t.py
State? (Enter to quit) >
damao@damao:~/Desktop$

因此,按下回车键时没有抛出异常。

关于回车换行

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,290评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,399评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,021评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,034评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,412评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,651评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,902评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,605评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,339评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,586评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,076评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,400评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,060评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,851评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,685评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,595评论 2 270

推荐阅读更多精彩内容

  • php usleep() 函数延迟代码执行若干微秒。 unpack() 函数从二进制字符串对数据进行解包。 uni...
    思梦PHP阅读 1,966评论 1 24
  • PHP常用函数大全 usleep() 函数延迟代码执行若干微秒。 unpack() 函数从二进制字符串对数据进行解...
    上街买菜丶迷倒老太阅读 1,317评论 0 20
  • Python简介 Python历史 Python 是由 Guido van Rossum 在八十年代末和九十年代初...
    莫名其妙的一生阅读 982评论 0 2
  • 孤独的灵魂拜倒在江南春天里 美的令人窒息 烦躁的心停靠在布达拉宫 空灵的无法比拟 浮夸的社会,繁华的街 找不到合适...
    二两酒仙阅读 332评论 13 36
  • 早上六点,清晨的第一缕阳光已经照进这座城市,试图叫醒那些还在熟睡的人。丽君像往常一样,已经起床洗漱完毕,开始...
    爱吹牛的实话家阅读 1,339评论 4 11